diff --git a/system/database/drivers/mysql/mysql_driver.php b/system/database/drivers/mysql/mysql_driver.php
index 20311ff..be7c672 100644
--- a/system/database/drivers/mysql/mysql_driver.php
+++ b/system/database/drivers/mysql/mysql_driver.php
@@ -7,12 +7,12 @@
  * @package		CodeIgniter
  * @author		Rick Ellis
  * @copyright	Copyright (c) 2006, pMachine, Inc.
- * @license		http://www.codeignitor.com/user_guide/license.html 
+ * @license		http://www.codeignitor.com/user_guide/license.html
  * @link		http://www.codeigniter.com
  * @since		Version 1.0
  * @filesource
  */
- 
+
 // ------------------------------------------------------------------------
 
 /**
@@ -32,10 +32,10 @@
 
 	/**
 	 * Whether to use the MySQL "delete hack" which allows the number
-	 * of affected rows to be shown. Uses a preg_replace when enabled, 
+	 * of affected rows to be shown. Uses a preg_replace when enabled,
 	 * adding a bit more processing to all queries.
 	 */	
-	var $delete_hack = TRUE; 
+	var $delete_hack = TRUE;
 
 	/**
 	 * Non-persistent database connection
@@ -113,28 +113,28 @@
 	 * @param	string	an SQL query
 	 * @return	string
 	 */	
-    function _prep_query($sql)
-    {
-		// "DELETE FROM TABLE" returns 0 affected rows This hack modifies 
+	function _prep_query($sql)
+	{
+		// "DELETE FROM TABLE" returns 0 affected rows This hack modifies
 		// the query so that it returns the number of affected rows
 		if ($this->delete_hack === TRUE)
 		{
-			if (preg_match('/^\s*DELETE\s+FROM\s+(\S+)\s*$/i', $sql)) 
+			if (preg_match('/^\s*DELETE\s+FROM\s+(\S+)\s*$/i', $sql))
 			{
 				$sql = preg_replace("/^\s*DELETE\s+FROM\s+(\S+)\s*$/", "DELETE FROM \\1 WHERE 1=1", $sql);
 			}
 		}
 		
 		return $sql;
-    }
-    
+	}
+
 	// --------------------------------------------------------------------
 
 	/**
 	 * Begin Transaction
-	 * 
+	 *
 	 * @access	public
-	 * @return	bool		 
+	 * @return	bool		
 	 */	
 	function trans_begin($test_mode = FALSE)
 	{
@@ -150,8 +150,8 @@
 		}
 
 		// Reset the transaction failure flag.
-		// If the $test_mode flag is set to TRUE transactions will be rolled back 
-		// even if the queries produce a successful result. 
+		// If the $test_mode flag is set to TRUE transactions will be rolled back
+		// even if the queries produce a successful result.
 		$this->_trans_failure = ($test_mode === TRUE) ? TRUE : FALSE;
 		
 		$this->simple_query('SET AUTOCOMMIT=0');
@@ -163,9 +163,9 @@
 
 	/**
 	 * Commit Transaction
-	 * 
+	 *
 	 * @access	public
-	 * @return	bool		 
+	 * @return	bool		
 	 */	
 	function trans_commit()
 	{
@@ -189,9 +189,9 @@
 
 	/**
 	 * Rollback Transaction
-	 * 
+	 *
 	 * @access	public
-	 * @return	bool		 
+	 * @return	bool		
 	 */	
 	function trans_rollback()
 	{
@@ -227,8 +227,8 @@
 			return $str;
 		}
 
-    	if (function_exists('mysql_real_escape_string'))
-    	{
+		if (function_exists('mysql_real_escape_string'))
+		{
 			return mysql_real_escape_string($str, $this->conn_id);
 		}
 		elseif (function_exists('mysql_escape_string'))
@@ -237,8 +237,8 @@
 		}
 		else
 		{
-        	return addslashes($str);
-    	}
+			return addslashes($str);
+		}
 	}
 		
 	// --------------------------------------------------------------------
diff --git a/system/database/drivers/mysql/mysql_result.php b/system/database/drivers/mysql/mysql_result.php
index 1cf6ff1..4bfaf54 100644
--- a/system/database/drivers/mysql/mysql_result.php
+++ b/system/database/drivers/mysql/mysql_result.php
@@ -7,7 +7,7 @@
  * @package		CodeIgniter
  * @author		Rick Ellis
  * @copyright	Copyright (c) 2006, pMachine, Inc.
- * @license		http://www.codeignitor.com/user_guide/license.html 
+ * @license		http://www.codeignitor.com/user_guide/license.html
  * @link		http://www.codeigniter.com
  * @since		Version 1.0
  * @filesource
@@ -65,7 +65,7 @@
 		$field_names = array();
 		while ($field = mysql_fetch_field($this->result_id))
 		{
-			$field_names[] = $field->name;       
+			$field_names[] = $field->name;
 		}
 		
 		return $field_names;
@@ -116,8 +116,8 @@
 	{
 		if (is_resource($this->result_id))
 		{
-        	mysql_free_result($this->result_id);
-        	$this->result_id = FALSE;
+			mysql_free_result($this->result_id);
+			$this->result_id = FALSE;
 		}
 	}
 
diff --git a/system/database/drivers/mysql/mysql_utility.php b/system/database/drivers/mysql/mysql_utility.php
index b387ace..b0a7dfe 100644
--- a/system/database/drivers/mysql/mysql_utility.php
+++ b/system/database/drivers/mysql/mysql_utility.php
@@ -7,7 +7,7 @@
  * @package		CodeIgniter
  * @author		Rick Ellis
  * @copyright	Copyright (c) 2006, pMachine, Inc.
- * @license		http://www.codeignitor.com/user_guide/license.html 
+ * @license		http://www.codeignitor.com/user_guide/license.html
  * @link		http://www.codeigniter.com
  * @since		Version 1.0
  * @filesource
@@ -129,39 +129,39 @@
 	
 		// Build the output
 		$output = '';
-        foreach ((array)$tables as $table)
-        { 
-        	// Is the table in the "ignore" list?
+		foreach ((array)$tables as $table)
+		{
+			// Is the table in the "ignore" list?
 			if (in_array($table, (array)$ignore, TRUE))
 			{
-        		continue;
-        	}
+				continue;
+			}
 
-        	// Get the table schema
+			// Get the table schema
 			$query = $this->db->query("SHOW CREATE TABLE `".$this->db->database.'`.'.$table);
 			
 			// No result means the table name was invalid
-        	if ($query === FALSE)
-        	{
-        		continue;
-        	}
-        	
-        	// Write out the table schema
-            $output .= '#'.$newline.'# TABLE STRUCTURE FOR: '.$table.$newline.'#'.$newline.$newline;
-                
+			if ($query === FALSE)
+			{
+				continue;
+			}
+			
+			// Write out the table schema
+			$output .= '#'.$newline.'# TABLE STRUCTURE FOR: '.$table.$newline.'#'.$newline.$newline;
+
  			if ($add_drop == TRUE)
  			{
-            	$output .= 'DROP TABLE IF EXISTS '.$table.';'.$newline.$newline;
+				$output .= 'DROP TABLE IF EXISTS '.$table.';'.$newline.$newline;
 			}
 			
 			$i = 0;
 			$result = $query->result_array();
 			foreach ($result[0] as $val)
 			{
-			    if ($i++ % 2)
-			    { 			    	
-			    	$output .= $val.';'.$newline.$newline;
-			    }
+				if ($i++ % 2)
+				{ 					
+					$output .= $val.';'.$newline.$newline;
+				}
 			}
 			
 			// If inserts are not needed we're done...
@@ -179,7 +179,7 @@
 			}
 		
 			// Fetch the field names and determine if the field is an
-			// integer type.  We use this info to decide whether to 
+			// integer type.  We use this info to decide whether to
 			// surround the data with quotes or not
 			
 			$i = 0;
@@ -188,13 +188,13 @@
 			while ($field = mysql_fetch_field($query->result_id))
 			{
 				$is_int[$i] = (in_array(
-										strtolower(mysql_field_type($query->result_id, $i)), 
-										array('tinyint', 'smallint', 'mediumint', 'int', 'bigint', 'timestamp'), 
+										strtolower(mysql_field_type($query->result_id, $i)),
+										array('tinyint', 'smallint', 'mediumint', 'int', 'bigint', 'timestamp'),
 										TRUE)
 										) ? TRUE : FALSE;
 										
 				// Create a string of field names
-				$field_str .= $field->name.', ';     
+				$field_str .= $field->name.', ';
 				$i++;
 			}
 			
@@ -211,8 +211,8 @@
 				foreach ($row as $v)
 				{
 					// Do a little formatting...
-					$v = str_replace(array("\x00", "\x0a", "\x0d", "\x1a"), array('\0', '\n', '\r', '\Z'), $v);   
-					$v = str_replace(array("\n", "\r", "\t"), array('\n', '\r', '\t'), $v);   
+					$v = str_replace(array("\x00", "\x0a", "\x0d", "\x1a"), array('\0', '\n', '\r', '\Z'), $v);
+					$v = str_replace(array("\n", "\r", "\t"), array('\n', '\r', '\t'), $v);
 					$v = str_replace('\\', '\\\\',	$v);
 					$v = str_replace('\'', '\\\'',	$v);
 					$v = str_replace('\\\n', '\n',	$v);
